﻿// Inner Fire 游戏引擎库
// SkinAnimator - 骨骼动画
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 用于渲染项目中骨骼动画的计算与保存
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-03-22

#include "skin_animator.h"
#include "klog.h"

namespace ifire::dx {

void SkinAnimator::Update(UploadBuffer<SkinnedConstants>* buffer) {

  // 仅当项目已经发生变化时才设置
  if (dirty_count == 0) {
    return;
  }

  // TODO：为了防止有些骨骼过于多
  size_t copy_count = mats_.size();
  if (copy_count > MAX_BONE_TRANSFORMS) {
    KERROR("Bons count > %d!", MAX_BONE_TRANSFORMS);
    copy_count = MAX_BONE_TRANSFORMS;
  }

  buffer->CopyAllAtOnce(
      Index(), mats_.data(), sizeof(XMMATRIX) * copy_count);

  // 其它的帧同样也要更新
  dirty_count--;
}

} // namespace ifire::dx